Skip to content

test(ci): add live smoke test for ci scopes select-all path#1460

Merged
mergify[bot] merged 3 commits into
mainfrom
devs/jd/worktree-rust-port/add-live-smoke-test-ci-scopes-select-path--14468b70
May 29, 2026
Merged

test(ci): add live smoke test for ci scopes select-all path#1460
mergify[bot] merged 3 commits into
mainfrom
devs/jd/worktree-rust-port/add-live-smoke-test-ci-scopes-select-path--14468b70

Conversation

@jd
Copy link
Copy Markdown
Member

@jd jd commented May 26, 2026

Pin the contract before porting ci scopes to Rust. The new test
exercises the "no base provided" branch — pass --head HEAD
without --base and the command must list every configured scope
as touched. This is the one execution path through ci scopes
that doesn't shell out to git diff, so the test stays hermetic
inside the tmp dir the cli fixture runs in (no git init, no
remote fetch, no Mergify API).

The Python implementation passes today. The follow-up port lands
on top and the same smoke test exercises the Rust binary,
catching any wire-format or exit-code drift between the two
implementations.

Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com

Depends-On: #1447

@jd
Copy link
Copy Markdown
Member Author

jd commented May 26, 2026

This pull request is part of a Mergify stack:

# Pull Request Link
1 refactor(ci): swap uuid for getrandom in the GHA heredoc delimiter #1446
2 refactor(config): standardize the workspace on serde_yaml_ng for YAML parsing #1447
3 test(ci): add live smoke test for ci scopes select-all path #1460 👈
4 feat(rust): port ci scopes to native Rust #1461
5 feat(ci): swap Python's JUnit XML parser for the native Rust parser #1465
6 feat(ci): swap Python's OTLP encode+upload for the native Rust pipeline #1466
7 feat(ci): promote ci junit-process and its junit-upload alias to native Rust #1467

@mergify
Copy link
Copy Markdown
Contributor

mergify Bot commented May 26, 2026

Merge Protections

Your pull request matches the following merge protections and will not be merged until they are valid.

🟢 ⛓️ Depends-On Requirements

Wonderful, this rule succeeded.

Requirement based on the presence of Depends-On in the body of the pull request

🟢 🤖 Continuous Integration

Wonderful, this rule succeeded.
  • all of:
    • check-success=ci-gate

🟢 👀 Review Requirements

Wonderful, this rule succeeded.
  • any of:
    • #approved-reviews-by>=2
    • author = dependabot[bot]
    • author = mergify-ci-bot
    • author = renovate[bot]

🟢 Enforce conventional commit

Wonderful, this rule succeeded.

Make sure that we follow https://www.conventionalcommits.org/en/v1.0.0/

  • title ~= ^(fix|feat|docs|style|refactor|perf|test|build|ci|chore|revert|ui)(?:\(.+\))?:

🟢 🔎 Reviews

Wonderful, this rule succeeded.
  • #changes-requested-reviews-by = 0
  • #review-requested = 0
  • #review-threads-unresolved = 0

🟢 📕 PR description

Wonderful, this rule succeeded.
  • body ~= (?ms:.{48,})

@jd
Copy link
Copy Markdown
Member Author

jd commented May 27, 2026

Revision history

# Type Changes Reason Date
1 initial 96a0757 2026-05-27 07:53 UTC
2 rebase 96a0757 → 14ce64c (rebase only) 2026-05-27 07:53 UTC
3 rebase 14ce64c → 46f9c59 (rebase only) 2026-05-27 08:27 UTC
4 rebase 46f9c59 → ae16810 (rebase only) 2026-05-27 10:04 UTC
5 rebase f67c01e → 4680d78 (rebase only) 2026-05-28 09:45 UTC
6 rebase 4680d78 → f58073c (rebase only) 2026-05-29 06:35 UTC

@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 27, 2026 07:53 Failure
@jd jd force-pushed the devs/jd/worktree-rust-port/standardize-workspace-serde-yaml-ng-yaml-parsing--f5d28d2c branch from 0ebb4a3 to 47ac6dc Compare May 27, 2026 08:27
@jd jd temporarily deployed to func-tests-live May 28, 2026 07:44 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 28, 2026 07:44 — with GitHub Actions Inactive
@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 28, 2026 07:45 Failure
JulianMaurin
JulianMaurin previously approved these changes May 28, 2026
@mergify mergify Bot requested a review from a team May 28, 2026 09:27
@jd jd force-pushed the devs/jd/worktree-rust-port/add-live-smoke-test-ci-scopes-select-path--14468b70 branch from f67c01e to 4680d78 Compare May 28, 2026 09:45
@jd jd force-pushed the devs/jd/worktree-rust-port/standardize-workspace-serde-yaml-ng-yaml-parsing--f5d28d2c branch from 3105241 to 2f82693 Compare May 28, 2026 09:45
@jd jd temporarily deployed to func-tests-live May 28, 2026 09:45 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 28, 2026 09:45 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 28, 2026 09:45 — with GitHub Actions Inactive
@mergify mergify Bot dismissed JulianMaurin’s stale review May 28, 2026 09:45

Pull request has been modified.

@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 28, 2026 09:45 Failure
jd and others added 3 commits May 29, 2026 08:33
`ci queue-info::write_github_output` formatted a unique
`ghadelimiter_<uuid-v4>` to guard against a metadata payload that
happens to contain its own heredoc delimiter. The actual contract
is "32 unpredictable hex chars", not "a UUID per RFC 4122" — the
delimiter is never parsed by anyone, only matched as a string.

Pull 16 random bytes straight from `getrandom::fill` and hex-encode
them. Drops `uuid` from the direct deps (it stays unreferenced and
disappears from `Cargo.lock`), with `getrandom` taking its place —
which `uuid` was already pulling in transitively, so the net add
is zero new code shipped to the binary.

The local helper is six lines. Same blast radius for a
maintainer-attack story, smaller surface to read.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Change-Id: Ib6599e9b6fca49281186b726a63e4641fa32596e
… parsing

The workspace had two YAML parsers — both forks of the archived
`dtolnay/serde-yaml`. `mergify-config` used `serde_norway` for
`.mergify.yml`; `mergify-ci` used `serde_yaml_ng` for merge-queue
metadata in PR bodies and git notes. Same job, two crates, two
transitive `unsafe-libyaml*` trees in Cargo.lock.

Standardize on `serde_yaml_ng` for both. The decision is grounded
in concrete signal, not vibe:

  Metric                     serde_norway   serde_yaml_ng
  ─────────────────────────  ─────────────  ─────────────
  Reverse-deps on lib.rs     229 (78 dir.)  618 (349 dir.)
  GitHub stars               53             109
  Last commit                2025-08-04     2025-09-14
  Bus factor (recent prs)    1 (solo)       merges externals
  Maintainer statement       v0.9.40 title  README: explicit
                             "I'm gonna       upstream-compat
                              maintain this"  intent
  unsafe-libyaml backend     forked ("…-    canonical
                             norway")
  Open since                 2024-06-10     2024-05-03
  License                    Apache-2.0     MIT (= upstream)

`serde_yaml_ng` wins on every axis that matters for the "will this
still be alive in two years" question: three-times the ecosystem
adoption, more recent activity, accepts third-party PRs, declares
the maintenance commitment in writing, and uses the canonical
`unsafe-libyaml` rather than a parallel-fork backend.

Functional surface is identical for both of our use shapes —
`from_str` to a typed struct for ci, `from_str` to `Value`
then convert to `serde_json::Value` for config validation.
Migration is purely a rename at the one call site.

Cargo.lock drops `serde_norway` and `unsafe-libyaml-norway`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Change-Id: If5d28d2c4259127181bace5bafb0ac02c78d8f7b
Pin the contract before porting `ci scopes` to Rust. The new test
exercises the "no base provided" branch — pass `--head HEAD`
without `--base` and the command must list every configured scope
as touched. This is the one execution path through `ci scopes`
that doesn't shell out to `git diff`, so the test stays hermetic
inside the tmp dir the `cli` fixture runs in (no git init, no
remote fetch, no Mergify API).

The Python implementation passes today. The follow-up port lands
on top and the same smoke test exercises the Rust binary,
catching any wire-format or exit-code drift between the two
implementations.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Change-Id: I14468b7046c449104675aea0a07a273eab479316
@jd jd force-pushed the devs/jd/worktree-rust-port/add-live-smoke-test-ci-scopes-select-path--14468b70 branch from 4680d78 to f58073c Compare May 29, 2026 06:35
@jd jd temporarily deployed to func-tests-live May 29, 2026 06:35 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 29, 2026 06:35 — with GitHub Actions Inactive
@mergify mergify Bot deployed to Mergify Merge Protections May 29, 2026 06:35 Active
@mergify mergify Bot requested a review from a team May 29, 2026 07:21
Base automatically changed from devs/jd/worktree-rust-port/standardize-workspace-serde-yaml-ng-yaml-parsing--f5d28d2c to main May 29, 2026 07:38
@mergify
Copy link
Copy Markdown
Contributor

mergify Bot commented May 29, 2026

Merge Queue Status

This pull request spent 17 minutes 43 seconds in the queue, including 17 minutes 9 seconds running CI.

Required conditions to merge

mergify Bot added a commit that referenced this pull request May 29, 2026
@mergify mergify Bot added the queued label May 29, 2026
@mergify mergify Bot merged commit 0c57026 into main May 29, 2026
36 checks passed
@mergify mergify Bot deleted the devs/jd/worktree-rust-port/add-live-smoke-test-ci-scopes-select-path--14468b70 branch May 29, 2026 08:18
@mergify mergify Bot removed the queued label May 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants